package cn.im.qywx.service.impl;

import cn.im.qywx.model.ImWxUserInfo;
import cn.im.qywx.queue.UserQueue;
import cn.im.qywx.service.ImWxUserInfoService;
import cn.im.qywx.view.UserQueueInfo;
import cn.im.qywx.wx.type.ModeType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @Description: 用户信息管理
 * @version V1.0
 */
@Service
@Slf4j
public class ImWxUserInfoServiceImpl  implements ImWxUserInfoService {

	/**
	 * 获取用户在那里
	 * 
	 * @param wxno
	 * @param pubWxno
	 * @return 1-从队列中 2-从数据库中 3-创建一个新用户放入队列中 
	 * 暂不进行数据库操作，如有需要，后续开发
	 */
	public int getUserInWhere(String wxno, String pubWxno) {
		int flag;
		ImWxUserInfo userInfo;

		flag = 1;// 1-从队列中 2-从数据库中 3-创建一个新用户放入队列中
		userInfo = (ImWxUserInfo) UserQueue.userInfoMapManager(0, wxno, null);// 从队列中获取用户

		// 用户不在队列中----------------------------------------------
		if (null == userInfo) {
			flag = 2;
			//userInfo = getUser4DB(wxno);// 从数据库中获取用户
			if (null == userInfo) {// 用户不在数据库中-----------------------------------------
				flag = 3;
				
				userInfo = new ImWxUserInfo();
				userInfo.setWeixinno(wxno);// 微信帐号
				userInfo.setWeixinpublic(pubWxno);// 微信公众账号
				
				userInfo.setFirstvisittime(new Date());// 第一次访问时间
				userInfo.setEndvisittime(new Date());// 最后一次来访时间
				userInfo.setVisitcount(1L);// 来访次数
				userInfo.setQueueInfo(initUserQueueInfo(userInfo.getWeixinno()));// 初始化用户队列指令集合

				UserQueue.userInfoMapManager(1, wxno, userInfo);// 将用户资料保存到队列中
				//this.savePo(userInfo);// 将用户资料保存到数据库中
			} else {

				// 用户注销后再来----------------------------------
//				if (userInfo.getVisitcount() == -1L) {
//					userInfo.setVisitcount(1L);
//					this.updatePo(userInfo);
//				}
				
				//若用户昵称 为空 
				/*if(StringUtils.isBlank(userInfo.getWeixinname())||StringUtils.isBlank(userInfo.getUnionid())){
					List<String> userlist = GetWxUserInfo.getNameUnionid(wxno);
					if(null != userlist && StringUtils.isNotBlank(userlist.get(0))&& StringUtils.isNotBlank(userlist.get(1))){
						userInfo.setWeixinname((String)userlist.get(0));
						userInfo.setUnionid((String)userlist.get(1));
					}
					List<String> userlist = GetWxUserInfo.getNameUnionid(wxno);
					if(null != userlist && StringUtils.isNotBlank(userlist.get(1))){
						userInfo.setWeixinname((String)userlist.get(0));
						userInfo.setUnionid((String)userlist.get(1));
					}else{
						log.info("-----------------------------------------------------------2获取不到Unionid："+wxno);
						String niname = GetWxUserInfo.getUserName(wxno);
						if(StringUtils.isNotBlank(niname)){
							userInfo.setWeixinname(niname);
						}
					}
				}*/
				
				userInfo.setQueueInfo(initUserQueueInfo(userInfo.getWeixinno()));// 初始化用户队列指令集合
				UserQueue.userInfoMapManager(1, wxno, userInfo);// 将用户资料保存到队列中
			}
		}
		return flag;
	}

	/**
	 * 用户取消关注
	 * 
	 * @param wxno
	 * 微信 open id
	 */
	public void userUnsubscribe(String wxno) {

		// 从数据库中修改访问为-1-----------------------------------
//		ImWxUserInfo wuInfo = getUser4DB(wxno);
//		if (null != wuInfo) {
//			wuInfo.setVisitcount(-1L);
//			wuInfo.setEndvisittime(new Date());
//			this.updatePo(wuInfo);
		}


	/**
	 * 初始化用户指令队列
	 * 
	 * @return
	 */
	private UserQueueInfo initUserQueueInfo(String weixinno) {
		UserQueueInfo uqInfo;
	//	UserPageToken upToken;
		//Map<ModeType, List<Instruction>> instruction;

		uqInfo = new UserQueueInfo();
		uqInfo.setUserMode(ModeType.MAIN);
		
		
		/*// 设置主导航到指令集合中---------------------------
		instruction = new HashMap<ModeType, List<Instruction>>();
		instruction.put(ModeType.MAIN, GetMainMeun.getInstructionList());
		uqInfo.setInstruction(instruction);*/


		return uqInfo;
	}

	

}
